#ifndef __ILOG_H__
#define __ILOG_H__

#include "CTypes.h"
#include "UsefulData.h"
#include <iostream>

class ILog
{
protected:
	u32 ActiveLogs;
public:
	ILog()				{	ActiveLogs = LOG_NONE;	}
	virtual ~ILog()		{}

	void SetActivesLogs(LOGS_TYPE newActivesLogs)	{	ActiveLogs = newActivesLogs;	}
	virtual std::ostream &GetDebugLog()			= 0;
	virtual std::ostream &GetInfoLog()			= 0;
	virtual std::ostream &GetReleaseLog()		= 0;
	virtual std::ostream &GetErrorDebugLog()	= 0;
	virtual std::ostream &GetErrorReleaseLog()	= 0;
};

void SetLog(ILog *nv);
POWERLIBRARYENGINE_API ILog *GetLog();
POWERLIBRARYENGINE_API void DeleteLog();
#define Log					GetLog()
#define pLogDebug			Log->GetDebugLog()
#define pLogInfo			Log->GetInfoLog()
#define pLogRelease			Log->GetReleaseLog()
#define pLogErrorDebug		Log->GetErrorDebugLog()
#define pLogErrorRelease	Log->GetErrorReleaseLog()
#define endl				std::endl

#endif
